﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
//3. 无重复字符的最长子串
//给定一个字符串 s ，请你找出其中不含有重复字符的 最长 子串 的长度。
public class Solution3
{
    public int LengthOfLongestSubstring(string s)
    {
        Dictionary<char,int> map = new Dictionary<char,int>();

        int length = s.Length;
        if (length == 0) return 0;
        if (length == 1) return 1;
        int slow = 0;
        int fast= 0;
        int maxlen = 0;
        //左指针slow一直向右。右指针fast也一直向右。
        while (fast < length)
        {
         
                //加入列表
                if (map.ContainsKey(s[fast]))//右子串重复
                {
                //记录一下当前子串的长度(不重复的时候也要返回啊
                
                map.Remove(s[slow]);
                slow++;
                
            }else
                {
                map.Add(s[fast], fast);
                fast++;
            }

            maxlen = Math.Max(maxlen, fast - slow);
        };

        return maxlen;
    }
    

    
}
class Program3
{

    static void Main3(string[] args)
    {
        string str = "abcabcbb";
        Solution3 solution = new Solution3();
    int  res=   solution.LengthOfLongestSubstring(str);
        Console.WriteLine(res);

    }
}
